package org.uam.common;

import java.io.Serializable;
import java.util.List;

public interface IEntityDao<T>
{
    /**
     * 新增对象
     * 
     * @param o
     *            对象实体
     */
    void insert(T o);

    /**
     * 更新对象
     * 
     * @param o
     *            对象实体
     * @return 0/1
     */
    int update(T o);

    /**
     * 删除对象
     * 
     * @param o
     *            对象实体
     * @return 0/1
     */
    int delete(T o);

    /**
     * 根据主键删除对象
     * 
     * @param id
     *            主键
     */
    void deleteByPrimarykey(Serializable id);

    /**
     * 批量删除对象
     * 
     * @param ids
     *            数组ids
     */
    void deleteBatch(String... ids);

    /**
     * 查询总行数
     * 
     * @return
     */
    int getEntityTotalCount();

    /**
     * 通过条件查询满足条件的行数
     * 
     * @param parameters
     * @return
     */
    int getEntityTotalCount(Object parameters);

    /**
     * 通过自定义条件查询满足条件的行数
     * 
     * @param statementId
     *            自定义SQL
     * @param parameters
     *            查询条件
     * @return
     */
    int getEntityTotalCount(String statementId, Object parameters);

    /**
     * 根据主键查找对象
     * 
     * @param id
     *            主键值
     * @return 对象实体
     */
    T findByPrimarykey(Serializable id);

    /**
     * sql查询单个对象
     * 
     * @param statementId
     *            sql语句名称后缀
     * @param parameters
     *            sql参数
     * @return 查询对象结果
     */
    T findObjectByCustom(String statementId, Object parameters);

    /**
     * 查找所有对象
     * 
     * @return 所有对象
     */
    List<T> findAll();

    /**
     * 根据Map查找满足条件的所有对象
     * 
     * @param map
     *            map对象
     * @return 满足条件的所有对象
     */
    List<T> findListByMap(Object parameters);

    /**
     * sql查询列表
     * 
     * @param statementId
     *            sql语句名称后缀
     * @param parameters
     *            sql参数
     * @return 查询对象结果
     */
    List<T> findListByCustom(String statementId, Object parameters);

    /**
     * 更新对象信息
     * 
     * @param statementId
     *            sql语句名称后缀
     * @param parameters
     *            sql参数
     */
    void updateCustom(String statementId, Object parameters);

}
